home *** CD-ROM | disk | FTP | other *** search
/ ADA Programming Guide / ADA Programming Guide.iso / adatutor / lrmrdr / chap02.doc < prev    next >
Text File  |  1996-01-30  |  25KB  |  1,218 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6. The following document is a draft  of  the  corresponding  chapter  of  the
  7. version  of  the  Ada  Reference  Manual  produced  in response to the Ansi
  8. Canvass.  It is given a limited circulation  to  Ada  implementers  and  to
  9. other groups contributing comments (according to the conventions defined in
  10. RRM.comments).  This draft should not be referred to in any publication.
  11.  
  12.  
  13.  
  14.                       ANSI-RM-02-v23 - Draft Chapter
  15.  
  16.                             2  Lexical Elements
  17.                                 version 23
  18.  
  19.                                  83-02-11
  20.  
  21.  
  22. This revision has addressed all comments up to #5795
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77. >                             2. Lexical Elements
  78.  
  79.  
  80.  
  81. The  text  of  a program consists of the texts of one or more compilations.
  82. The text of a compilation is a sequence of lexical elements, each  composed
  83. of  characters;   the  rules  of  composition  are  given  in this chapter.
  84. Pragmas, which provide certain  information  for  the  compiler,  are  also
  85. described in this chapter.
  86.  
  87. References:   character  2.1, compilation 10.1, lexical element 2.2, pragma
  88. 2.8
  89.  
  90.  
  91.  
  92.  
  93. > 2.1  Character Set
  94.  
  95.  
  96. The only  characters allowed in the text  of  a  program  are  the  graphic
  97. characters  and  format effectors.  Each graphic character corresponds to a
  98. unique code of the ISO seven-bit coded character set  (ISO  standard  646),
  99. and  is  represented  (visually)  by  a  graphical  symbol.   Some  graphic
  100. characters are represented by different graphical  symbols  in  alternative
  101. national  representations of the ISO character set.  The description of the
  102. language definition in  this  standard  reference  manual  uses  the  ASCII
  103. graphical  symbols,  the ANSI graphical representation of the ISO character
  104. set.
  105.  
  106.     graphic_character ::= basic_graphic_character
  107.        | lower_case_letter | other_special_character
  108.  
  109.     basic_graphic_character ::=
  110.          upper_case_letter | digit
  111.        | special_character | space_character
  112.  
  113.     basic_character ::=
  114.          basic_graphic_character | format_effector
  115.  
  116. The basic character  set  is  sufficient  for  writing  any  program.   The
  117. characters  included  in each of the categories of basic graphic characters
  118. are defined as follows:
  119.  
  120. (a)  upper case letters
  121.      A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
  122.  
  123. (b)  digits
  124.      0 1 2 3 4 5 6 7 8 9
  125.  
  126. (c)  special characters
  127.      " # & ' ( ) * + , - . / : ; < = > _ |
  128.  
  129. (d)  the space character
  130.  
  131. Format effectors are the  ISO  (and  ASCII)  characters  called  horizontal
  132. tabulation, vertical tabulation, carriage return, line feed, and form feed.
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191. The  characters  included  in  each  of the remaining categories of graphic
  192. characters are defined as follows:
  193.  
  194. (e)  lower case letters
  195.      a b c d e f g h i j k l m n o p q r s t u v w x y z
  196.  
  197. (f)  other special characters
  198.      ! $ % ? @ [ \ ] ^ ` { }
  199.  
  200. Allowable replacements for the special characters vertical bar  (|),  sharp
  201. (#), and quotation (") are defined in section 2.10.
  202.  
  203. Notes:
  204.  
  205. The  ISO  character  that  corresponds to the sharp graphical symbol in the
  206. ASCII representation appears as a pound  sterling  symbol  in  the  French,
  207. German, and United Kingdom standard national representations.  In any case,
  208. the  font  design  of  graphical  symbols (for example, whether they are in
  209. italic or bold typeface) is not part of the ISO standard.
  210.  
  211. The meanings of the acronyms used in this section  are  as  follows:   ANSI
  212. stands for American National Standards Institute, ASCII stands for American
  213. Standard Code for Information Interchange, and ISO stands for International
  214. Organization for Standardization.
  215.  
  216. The following names are used when referring to special characters and other
  217. special characters:
  218.  
  219.     symbol     name                        symbol     name
  220.  
  221.       "        quotation                     >        greater than
  222.       #        sharp                         _        underline
  223.       &        ampersand                     |        vertical bar
  224.       '        apostrophe                    !        exclamation mark
  225.       (        left parenthesis              $        dollar
  226.       )        right parenthesis             %        percent
  227.       *        star, multiply                ?        question mark
  228.       +        plus                          @        commercial at
  229.       ,        comma                         [        left square bracket
  230.       -        hyphen, minus                 \        back-slash
  231.       .        dot, point, period            ]        right square bracket
  232.       /        slash, divide                 ^        circumflex
  233.       :        colon                         `        grave accent
  234.       ;        semicolon                     {        left brace
  235.       <        less than                     }        right brace
  236.       =        equal                         `     tilde
  237.  
  238.  
  239.  
  240.  
  241. > 2.2  Lexical Elements, Separators, and Delimiters
  242.  
  243.  
  244. The  text  of  a program consists of the texts of one or more compilations.
  245. The text of each compilation is a sequence of  separate  lexical  elements.
  246. Each  lexical  element is either a delimiter, an identifier (which may be a
  247. reserved word), a numeric literal, a character literal, a  string  literal,
  248. or  a  comment.   The  effect  of  a program depends only on the particular
  249. sequences of lexical elements that form  its  compilations,  excluding  the
  250. comments, if any.
  251.  
  252.  
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271.  
  272.  
  273.  
  274.  
  275.  
  276.  
  277.  
  278.  
  279.  
  280.  
  281.  
  282.  
  283.  
  284.  
  285.  
  286.  
  287.  
  288.  
  289.  
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311. In  some  cases  an  explicit  separator  is  required to separate adjacent
  312. lexical elements (namely, when  without  separation,  interpretation  as  a
  313. single  lexical  element  is  possible).   A  separator  is  any of a space
  314. character, a format effector, or the end of a line.  A space character is a
  315. separator except within a comment, a string literal, or a  space  character
  316. literal.   Format  effectors  other  than  horizontal tabulation are always
  317. separators.  Horizontal tabulation is a separator except within a  comment.
  318.  
  319. The end of a line is always a separator.  The language does not define what
  320. causes  the end of a line.  However if, for a given implementation, the end
  321. of a line is signified by one or more  characters,  then  these  characters
  322. must  be format effectors other than horizontal tabulation.  In any case, a
  323. sequence of one or more format effectors other than  horizontal  tabulation
  324. must cause at least one end of line.
  325.  
  326. One  or  more  separators  are  allowed  between  any  two adjacent lexical
  327. elements, before the first of each compilation,  or  after  the  last.   At
  328. least  one separator is required between an identifier or a numeric literal
  329. and an adjacent identifier or numeric literal.
  330.  
  331. A delimiter is either one of the following special characters (in the basic
  332. character set)
  333.  
  334.     & ' ( ) * + , - . / : ; < = > |
  335.  
  336. or one of the following compound delimiters each composed of  two  adjacent
  337. special characters
  338.  
  339.     =>   ..   **   :=   /=   >=   <=   <<   >>   <>
  340.  
  341. Each  of the special characters listed for single character delimiters is a
  342. single delimiter except if this character is  used  as  a  character  of  a
  343. compound  delimiter,  or  as  a  character  of  a  comment, string literal,
  344. character literal, or numeric literal.
  345.  
  346. The remaining forms of lexical element are described in other  sections  of
  347. this chapter.
  348.  
  349. Notes:
  350.  
  351. Each  lexical  element  must  fit on one line, since the end of a line is a
  352. separator.  The quotation, sharp, and underline  characters,  likewise  two
  353. adjacent  hyphens,  are  not delimiters, but may form part of other lexical
  354. elements.
  355.  
  356. The following names are used when referring to compound delimiters:
  357.  
  358.     delimiter     name
  359.  
  360.        =>         arrow
  361.        ..         double dot
  362.        **         double star, exponentiate
  363.        :=         assignment (pronounced: "becomes")
  364.        /=         inequality (pronounced: "not equal")
  365.        >=         greater than or equal
  366.        <=         less than or equal
  367.        <<         left label bracket
  368.        >>         right label bracket
  369.        <>         box
  370.  
  371. References:  character literal 2.5, comment 2.7, compilation  10.1,  format
  372. effector 2.1, identifier 2.3, numeric literal 2.4, reserved word 2.9, space
  373. character 2.1, special character 2.1, string literal 2.6
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402.  
  403.  
  404.  
  405.  
  406.  
  407.  
  408.  
  409.  
  410.  
  411.  
  412.  
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419.  
  420.  
  421.  
  422.  
  423.  
  424.  
  425.  
  426.  
  427.  
  428.  
  429.  
  430.  
  431. > 2.3  Identifiers
  432.  
  433.  
  434. Identifiers are used as names and also as reserved words.
  435.  
  436.     identifier ::=
  437.        letter {[underline] letter_or_digit}
  438.  
  439.     letter_or_digit ::= letter | digit
  440.  
  441.     letter ::= upper_case_letter | lower_case_letter
  442.  
  443. All  characters  of  an identifier are significant, including any underline
  444. character inserted between a letter or digit  and  an  adjacent  letter  or
  445. digit.   Identifiers  differing  only in the use of corresponding upper and
  446. lower case letters are considered as the same.
  447.  
  448. Examples:
  449.  
  450.     COUNT      X    get_symbol   Ethelyn   Marion
  451.  
  452.     SNOBOL_4   X1   PageCount    STORE_NEXT_ITEM
  453.  
  454. Note:
  455.  
  456. No space is allowed within an identifier since a space is a separator.
  457.  
  458. References:  digit 2.1, lower case letter 2.1, name 4.1, reserved word 2.9,
  459. separator 2.2, space character 2.1, upper case letter 2.1
  460.  
  461.  
  462.  
  463.  
  464. > 2.4  Numeric Literals
  465.  
  466.  
  467. There are two classes of  numeric  literals:   real  literals  and  integer
  468. literals.   A  real literal is a numeric literal that includes a point;  an
  469. integer literal is a numeric literal without a point.   Real  literals  are
  470. the literals of the type universal_real.  Integer literals are the literals
  471. of the type universal_integer.
  472.  
  473.     numeric_literal ::= decimal_literal | based_literal
  474.  
  475.  
  476. References:  literal 4.2, universal_integer type 3.5.4, universal_real type
  477. 3.5.6
  478.  
  479.  
  480.  
  481.  
  482. > 2.4.1  Decimal Literals
  483.  
  484. A  decimal  literal  is  a  numeric  literal  expressed in the conventional
  485. decimal notation (that is, the base is implicitly ten).
  486.  
  487.     decimal_literal ::= integer [.integer] [exponent]
  488.  
  489.     integer  ::= digit {[underline] digit}
  490.  
  491.     exponent ::= E [+] integer | E - integer
  492.  
  493.  
  494.  
  495.  
  496.  
  497.  
  498.  
  499.  
  500.  
  501.  
  502.  
  503.  
  504.  
  505.  
  506.  
  507.  
  508.  
  509.  
  510.  
  511.  
  512.  
  513.  
  514.  
  515.  
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.  
  533.  
  534.  
  535.  
  536.  
  537.  
  538.  
  539.  
  540.  
  541.  
  542.  
  543.  
  544.  
  545.  
  546.  
  547.  
  548.  
  549. An underline character  inserted  between  adjacent  digits  of  a  decimal
  550. literal does not affect the value of this numeric literal.  The letter E of
  551. the exponent, if any, can be written either in lower case or in upper case,
  552. with the same meaning.
  553.  
  554. An  exponent  indicates  the power of ten by which the value of the decimal
  555. literal without the exponent is to be multiplied to obtain the value of the
  556. decimal literal with the exponent.  An exponent for an integer literal must
  557. not have a minus sign.
  558.  
  559. Examples:
  560.  
  561.     12        0      1E6    123_456     --  integer literals
  562.  
  563.     12.0      0.0    0.456  3.14159_26  --  real literals
  564.  
  565.     1.34E-12  1.0E+6  --  real literals with exponent
  566.  
  567.  
  568. Notes:
  569.  
  570. Leading zeros are allowed.  No space is allowed in a numeric  literal,  not
  571. even between constituents of the exponent, since a space is a separator.  A
  572. zero exponent is allowed for an integer literal.
  573.  
  574. References:   digit  2.1,  lower  case  letter  2.1,  numeric  literal 2.4,
  575. separator 2.2, space character 2.1, upper case letter 2.1
  576.  
  577.  
  578.  
  579.  
  580. > 2.4.2  Based Literals
  581.  
  582.  
  583. A based literal is a numeric literal expressed in a form that specifies the
  584. base explicitly.  The base must be at least two and at most sixteen.
  585.  
  586.     based_literal ::=
  587.        base # based_integer [.based_integer] # [exponent]
  588.  
  589.     base ::= integer
  590.  
  591.     based_integer ::=
  592.        extended_digit {[underline] extended_digit}
  593.  
  594.     extended_digit ::= digit | letter
  595.  
  596. An underline character inserted between adjacent digits of a based  literal
  597. does  not  affect  the  value  of  this  numeric literal.  The base and the
  598. exponent, if any, are in decimal notation.  The  only  letters  allowed  as
  599. extended  digits  are  the  letters  A through F for the digits ten through
  600. fifteen.  A letter in a based literal (either  an  extended  digit  or  the
  601. letter  E  of  an exponent) can be written either in lower case or in upper
  602. case, with the same meaning.
  603.  
  604.  
  605.  
  606.  
  607.  
  608.  
  609.  
  610.  
  611.  
  612.  
  613.  
  614. The conventional meaning of based notation is assumed;  in  particular  the
  615. value of each extended digit of a based literal must be less than the base.
  616. An exponent indicates the power of the base by which the value of the based
  617. literal without the exponent is to be multiplied to obtain the value of the
  618. based literal with the exponent.
  619.  
  620.  
  621.  
  622.  
  623.  
  624.  
  625.  
  626.  
  627.  
  628.  
  629.  
  630.  
  631.  
  632.  
  633.  
  634.  
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664.  
  665.  
  666.  
  667.  
  668.  
  669.  
  670.  
  671.  
  672.  
  673.  
  674.  
  675.  
  676.  
  677.  
  678.  
  679. Examples:
  680.  
  681.     2#1111_1111#     16#FF#        016#0FF#    --  integer literals of value 255
  682.     16#E#E1          2#1110_0000#              --  integer literals of value 224
  683.     16#F.FF#E+2      2#1.1111_1111_111#E11     --  real literals of value 4095.0
  684.  
  685. References:   digit 2.1, exponent 2.4.1, letter 2.3, lower case letter 2.1,
  686. numeric literal 2.4, upper case letter 2.1
  687.  
  688.  
  689.  
  690.  
  691. > 2.5  Character Literals
  692.  
  693.  
  694. A character  literal   is  formed  by  enclosing  one  of  the  95  graphic
  695. characters  (including  the  space)  between  two apostrophe characters.  A
  696. character literal has a value that belongs to a character type.
  697.  
  698.     character_literal ::= 'graphic_character'
  699.  
  700. Examples:
  701.  
  702.     'A'   '*'   '''   ' '
  703.  
  704. References:  character type 3.5.2,  graphic  character  2.1,  literal  4.2,
  705. space character 2.1
  706.  
  707.  
  708.  
  709.  
  710. > 2.6  String Literals
  711.  
  712.  
  713. A  string  literal  is formed by a sequence of graphic characters (possibly
  714. none) enclosed between two quotation characters used as string brackets.
  715.  
  716.     string_literal ::= "{graphic_character}"
  717.  
  718. A string literal has a  value  that  is  a  sequence  of  character  values
  719. corresponding  to  the  graphic characters of the string literal apart from
  720. the quotation character itself.  If a quotation character value  is  to  be
  721. represented  in  the  sequence of character values, then a pair of adjacent
  722. quotation characters must be written at the corresponding place within  the
  723. string  literal.   (This  means  that  a  string  literal that includes two
  724. adjacent quotation characters is never interpreted as two  adjacent  string
  725. literals.)
  726.  
  727. The  length  of  a  string literal is the number of character values in the
  728. sequence represented.  (Each doubled quotation character is  counted  as  a
  729. single character.)
  730.  
  731. Examples:
  732.  
  733.     "Message of the day:"
  734.  
  735.     ""                     --  an empty string literal
  736.     " "   "A"   """"       --  three string literals of length 1
  737.  
  738.     "Characters such as $, %, and } are allowed in string literals"
  739.  
  740.  
  741.  
  742.  
  743.  
  744.  
  745.  
  746.  
  747.  
  748.  
  749.  
  750.  
  751.  
  752.  
  753.  
  754.  
  755.  
  756.  
  757.  
  758.  
  759.  
  760.  
  761.  
  762.  
  763.  
  764.  
  765.  
  766.  
  767.  
  768.  
  769.  
  770.  
  771.  
  772.  
  773.  
  774.  
  775.  
  776.  
  777.  
  778.  
  779.  
  780.  
  781.  
  782.  
  783.  
  784.  
  785.  
  786.  
  787.  
  788.  
  789.  
  790.  
  791.  
  792.  
  793.  
  794.  
  795.  
  796.  
  797.  
  798. Note:
  799.  
  800. A  string  literal  must fit on one line since it is a lexical element (see
  801. 2.2).  Longer sequences of graphic character  values  can  be  obtained  by
  802. catenation  of string literals.  Similarly catenation of constants declared
  803. in the package ASCII can be used to obtain sequences  of  character  values
  804. that   include   nongraphic   character   values   (the  so-called  control
  805. characters).  Examples of such uses of catenation are given below:
  806.  
  807.     "FIRST PART OF A SEQUENCE OF CHARACTERS " &
  808.     "THAT CONTINUES ON THE NEXT LINE"
  809.  
  810.     "sequence that includes the" & ASCII.ACK & "control character"
  811.  
  812. References:   ascii  predefined  package  C,  catenation  operation  4.5.3,
  813. character  value 3.5.2, constant 3.2.1, declaration 3.1, end of a line 2.2,
  814. graphic character 2.1, lexical element 2.2
  815.  
  816.  
  817.  
  818.  
  819. > 2.7  Comments
  820.  
  821.  
  822. A comment starts with two adjacent hyphens and extends up to the end of the
  823. line.  A comment can appear on any line of  a  program.   The  presence  or
  824. absence  of  comments  has  no  influence  on whether a program is legal or
  825. illegal.  Furthermore,  comments do not influence the effect of a  program;
  826. their sole purpose is the enlightenment of the human reader.
  827.  
  828. Examples:
  829.  
  830.     --  the last sentence above echoes the Algol 68 report
  831.  
  832.     end;  --  processing of LINE is complete
  833.  
  834.     --  a long comment may be split onto
  835.     --  two or more consecutive lines
  836.  
  837.     ----------------  the first two hyphens start the comment
  838.  
  839. Note:
  840.  
  841. Horizontal  tabulation  can   be used in comments, after the double hyphen,
  842. and is equivalent to one or more spaces (see 2.2).
  843.  
  844. References:  end of a line 2.2, illegal 1.6, legal 1.6, space character 2.1
  845.  
  846.  
  847.  
  848.  
  849. > 2.8  Pragmas
  850.  
  851. A pragma is used to convey information to the compiler.   A  pragma  starts
  852. with the reserved word pragma followed by an identifier that is the name of
  853. the pragma.
  854.  
  855.     pragma ::=
  856.        pragma identifier [(argument_association {, argument_association})];
  857.  
  858.     argument_association ::=
  859.          [argument_identifier =>] name
  860.        | [argument_identifier =>] expression
  861.  
  862.  
  863.  
  864.  
  865.  
  866.  
  867.  
  868.  
  869.  
  870.  
  871.  
  872.  
  873.  
  874.  
  875.  
  876.  
  877.  
  878.  
  879.  
  880.  
  881.  
  882.  
  883.  
  884.  
  885.  
  886.  
  887.  
  888.  
  889.  
  890.  
  891.  
  892.  
  893.  
  894.  
  895.  
  896.  
  897.  
  898.  
  899.  
  900.  
  901.  
  902.  
  903.  
  904.  
  905.  
  906.  
  907.  
  908.  
  909.  
  910.  
  911.  
  912.  
  913.  
  914.  
  915.  
  916. Pragmas are only allowed at the following places in a program:
  917.  
  918.   -  After  a  semicolon  delimiter,  but  not  within  a  formal  part  or
  919.      discriminant part.
  920.  
  921.   -  At any place where the syntax rules allow a  construct  defined  by  a
  922.      syntactic  category  whose  name ends with "declaration", "statement",
  923.      "clause", or "alternative", or one of the syntactic categories variant
  924.      and exception handler;  but not in place of such a construct.  Also at
  925.      any place where a compilation unit would be allowed.
  926.  
  927. Additional restrictions exist for the placement of specific pragmas.
  928.  
  929. Some  pragmas  have  arguments.   Argument  associations  can   be   either
  930. positional  or named as for parameter associations of subprogram calls (see
  931. 6.4).  Named associations are,  however,  only  possible  if  the  argument
  932. identifiers are defined.  A name given in an argument must be either a name
  933. visible at the place of the pragma or an identifier specific to the pragma.
  934.  
  935. The pragmas defined by the language are described in Annex B:  they must be
  936. supported  by  every  implementation.   In  addition, an implementation may
  937. provide implementation-defined pragmas, which must  then  be  described  in
  938. Appendix  F.   An  implementation  is  not  allowed to define pragmas whose
  939. presence or absence influences  the  legality  of  the  text  outside  such
  940. pragmas.   Consequently,  the  legality of a program does not depend on the
  941. presence or absence of implementation-defined pragmas.
  942.  
  943. A pragma that is not language-defined has no effect if  its  identifier  is
  944. not  recognized  by  the  (current)  implementation.  Furthermore, a pragma
  945. (whether language-defined or implementation-defined) has no effect  if  its
  946. placement  or  its  arguments  do not correspond to what is allowed for the
  947. pragma.  The region of text over which a pragma has an  effect  depends  on
  948. the pragma.
  949.  
  950. Examples:
  951.  
  952.     pragma LIST(OFF);
  953.     pragma OPTIMIZE(TIME);
  954.     pragma INLINE(SETMASK);
  955.     pragma SUPPRESS(RANGE_CHECK, ON => INDEX);
  956.  
  957. Note:
  958.  
  959. It  is  recommended  (but not required) that implementations issue warnings
  960. for pragmas that are not recognized and therefore ignored.
  961.  
  962. References:  compilation unit 10.1, delimiter 2.2, discriminant part 3.7.1,
  963. exception handler 11.2, expression 4.4, formal part  6.1,  identifier  2.3,
  964. implementation-defined pragma F, language-defined pragma B, legal 1.6, name
  965. 4.1,  reserved word 2.9, statement 5, static expression 4.9, variant 3.7.3,
  966. visibility 8.3
  967.  
  968. Categories ending with  "declaration"  comprise:   basic  declaration  3.1,
  969. component   declaration  3.7,  entry  declaration  9.5,  generic  parameter
  970. declaration 12.1
  971.  
  972. Categories ending with "clause" comprise:  alignment clause 13.4, component
  973. clause 13.4, context clause 10.1.1, representation clause 13.1, use  clause
  974. 8.4, with clause 10.1.1
  975.  
  976. Categories  ending  with "alternative" comprise:  accept alternative 9.7.1,
  977. case statement alternative 5.4, delay alternative 9.7.1, select alternative
  978. 9.7.1, selective wait alternative 9.7.1, terminate alternative 9.7.1
  979.  
  980.  
  981.  
  982.  
  983.  
  984.  
  985.  
  986.  
  987.  
  988.  
  989.  
  990.  
  991.  
  992.  
  993.  
  994.  
  995.  
  996.  
  997.  
  998.  
  999.  
  1000.  
  1001.  
  1002.  
  1003.  
  1004.  
  1005.  
  1006.  
  1007.  
  1008.  
  1009.  
  1010.  
  1011.  
  1012.  
  1013.  
  1014.  
  1015.  
  1016.  
  1017.  
  1018.  
  1019.  
  1020.  
  1021.  
  1022.  
  1023.  
  1024.  
  1025.  
  1026.  
  1027.  
  1028.  
  1029.  
  1030.  
  1031.  
  1032.  
  1033.  
  1034.  
  1035.  
  1036.  
  1037. > 2.9  Reserved Words
  1038.  
  1039.  
  1040. The identifiers listed below are called reserved words and are reserved for
  1041. special significance in the language.  For readability of this manual,  the
  1042. reserved words appear in lower case boldface.
  1043.  
  1044.  
  1045.     abort       declare      generic    of           select
  1046.     abs         delay        goto       or           separate
  1047.     accept      delta                   others       subtype
  1048.     access      digits       if         out
  1049.     all         do           in                      task
  1050.     and                      is         package      terminate
  1051.     array                               pragma       then
  1052.     at          else                    private      type
  1053.                 elsif        limited    procedure
  1054.                 end          loop
  1055.     begin       entry                   raise        use
  1056.     body        exception               range
  1057.                 exit         mod        record       when
  1058.                                         rem          while
  1059.                              new        renames      with
  1060.     case        for          not        return
  1061.     constant    function     null       reverse      xor
  1062.  
  1063. A reserved word must not be used as a declared identifier.
  1064.  
  1065. Notes:
  1066.  
  1067. Reserved  words  differing only in the use of corresponding upper and lower
  1068. case letters are considered as the same (see 2.3).  In some attributes  the
  1069. identifier  that appears after the apostrophe is identical to some reserved
  1070. word.
  1071.  
  1072. References:  attribute 4.1.4, declaration 3.1, identifier 2.3,  lower  case
  1073. letter 2.1, upper case letter 2.1
  1074.  
  1075.  
  1076.  
  1077.  
  1078. > 2.10  Allowable Replacements of Characters
  1079.  
  1080.  
  1081. The  following  replacements  are  allowed for the vertical bar, sharp, and
  1082. quotation basic characters:
  1083.  
  1084.   -  A vertical bar character (|) can be replaced by  an  exclamation  mark
  1085.      (!)  where used as a delimiter.
  1086.  
  1087.   -  The sharp characters (#) of a based literal can be replaced by  colons
  1088.      (:) provided that the replacement is done for both occurrences.
  1089.  
  1090.   -  The quotation characters (") used as string brackets at both ends of a
  1091.      string literal can be replaced by percent characters (%) provided that
  1092.      the  enclosed  sequence of characters contains no quotation character,
  1093.      and provided that both string  brackets  are  replaced.   Any  percent
  1094.      character  within  the sequence of characters must then be doubled and
  1095.      each such doubled percent character is interpreted as a single percent
  1096.      character value.
  1097.  
  1098.  
  1099.  
  1100.  
  1101.  
  1102.  
  1103.  
  1104.  
  1105.  
  1106.  
  1107.  
  1108.  
  1109.  
  1110.  
  1111.  
  1112.  
  1113.  
  1114.  
  1115.  
  1116.  
  1117.  
  1118.  
  1119.  
  1120.  
  1121.  
  1122.  
  1123.  
  1124.  
  1125.  
  1126.  
  1127.  
  1128.  
  1129.  
  1130.  
  1131.  
  1132.  
  1133.  
  1134.  
  1135.  
  1136.  
  1137.  
  1138.  
  1139.  
  1140.  
  1141.  
  1142.  
  1143.  
  1144.  
  1145.  
  1146.  
  1147.  
  1148.  
  1149.  
  1150.  
  1151.  
  1152.  
  1153.  
  1154.  
  1155.  
  1156.  
  1157. These replacements do not change the meaning of the program.
  1158.  
  1159. Notes:
  1160.  
  1161. It is recommended that use of the replacements for the vertical bar, sharp,
  1162. and quotation characters be restricted to  cases  where  the  corresponding
  1163. graphical symbols are not available.  Note that the vertical bar appears as
  1164. a  broken  bar  on  some equipment;  replacement is not recommended in this
  1165. case.
  1166.  
  1167. The rules given for identifiers and numeric literals are  such  that  lower
  1168. case  and  upper  case  letters  can  be used indifferently;  these lexical
  1169. elements can thus be written using only characters of the  basic  character
  1170. set.  If a string literal of the predefined type STRING contains characters
  1171. that  are  not  in  the basic character set, the same sequence of character
  1172. values can be obtained by catenating  string  literals  that  contain  only
  1173. characters  of  the  basic  character set with suitable character constants
  1174. declared in the predefined package ASCII.  Thus the string literal  "AB$CD"
  1175. could  be  replaced  by  "AB" & ASCII.DOLLAR & "CD".  Similarly, the string
  1176. literal "ABcd" with  lower  case  letters  could  be  replaced  by  "AB"  &
  1177. ASCII.LC_C & ASCII.LC_D.
  1178.  
  1179. References:   ascii  predefined  package  C,  based  literal  2.4.2,  basic
  1180. character 2.1, catenation operation 4.5.3, character value 3.5.2, delimiter
  1181. 2.2, graphic character 2.1, graphical symbol 2.1, identifier  2.3,  lexical
  1182. element  2.2,  lower  case  letter 2.1, numeric literal 2.4, string bracket
  1183. 2.6, string literal 2.6, upper case letter 2.1
  1184.  
  1185.  
  1186.  
  1187.  
  1188.  
  1189.  
  1190.  
  1191.  
  1192.  
  1193.  
  1194.  
  1195.  
  1196.  
  1197.  
  1198.  
  1199.  
  1200.  
  1201.  
  1202.  
  1203.  
  1204.  
  1205.  
  1206.  
  1207.  
  1208.  
  1209.  
  1210.  
  1211.  
  1212.  
  1213.  
  1214.  
  1215.  
  1216.  
  1217.  
  1218.